package com.shujia.day18;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Properties;

public class Demo04MysqlConProperties {
    public static void main(String[] args) throws Exception {


        /*
           TODO 方式1：
                    1. 可以使用配置文件方式
                    2. 通过传参指定当前系统中的配置文件路径
        */
        if (args.length > 0) {
            String path = args[0];
            File file = new File(path);
            if (!file.exists()) {
                throw new FileNotFoundException("文件不存在"+file);
            }
        }else {
            throw new Exception("配置文件的路径没有给定");
        }


        Properties properties = new Properties();
        properties.load(new FileReader(args[0]));


        /*
            TODO 如何支持传入的参数具有识别大小写的功能，并且参数值都可以取出 ？
                自行思考
         */
        if (properties.size() >= 4) {
            String[] allKeys = {"driver", "url", "user", "passwd"};
            for (String key : allKeys) {
                if (!properties.containsKey(key)) {
                    throw new Exception("参数缺失:" + key + "请输入相关的参数，例如驱动,url,user,passwd并以->作为分隔符");
                }
            }
        } else {
            throw new Exception("请输入相关的参数，例如驱动,url,user,passwd并以->作为分隔符");
        }



        /*
            TODO 1.加载驱动
         */
        Class.forName(properties.getProperty("driver"));


        /*
            TODO 2.创建连接 -> 通过给定一些URL 用户名 密码 获取数据库连接对象
         */

        Connection connection = DriverManager.getConnection(properties.getProperty("url"), properties.getProperty("user"), properties.getProperty("passwd"));
//        DriverManager.get

        // TODO 3.获取操作对象  -> 通过操作对象，可以执行SQL等操作
        Statement statement = connection.createStatement();

        // TODO 4.编写SQL并执行
        String sql = "select * from students";
        ResultSet resultSet = statement.executeQuery(sql);

        // TODO 5.如果当SQL有返回结果，那么需要对结果进行遍历
        while (resultSet.next()) {
            String id = resultSet.getString("id");
            String name = resultSet.getString("name");
            int age = resultSet.getInt("age");
            String gender = resultSet.getString("gender");
            String clazz = resultSet.getString("clazz");
            System.out.println(id + "\t" + name + "\t" + age + "\t" + gender + "\t" + clazz);
        }

        // TODO 6.对操作对象以及连接进行关闭操作
        statement.close();
        connection.close();


    }
}
